package dbclass;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.sun.org.apache.bcel.internal.generic.RETURN;

import classes.DbClass;

import beans.Imagem;
import beans.Noticia;
import beans.Video;

public class ImagemJDBC implements ImagemDAO{	

	private Connection con;
	
	
	public Imagem insert(Imagem imagem) throws SQLException, ClassNotFoundException
	{
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		boolean check =  stm.execute("INSERT INTO imagem (id, url, titulo) VALUES (" +
				"NULL, '" + imagem.getUrl() + "', '" + imagem.getTitulo() + "')");
		

		
		if(check)
		{
			return imagem;
		}	
		return null;	
	}
	
	public Imagem update(Imagem imagem) throws SQLException, ClassNotFoundException
	{
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		boolean check = stm.execute("UPDATE imagem SET url = '" + imagem.getUrl() + "', titulo = '" 
				+ imagem.getTitulo() + "' WHERE id = '" + imagem.getId() + "'");
		
		if(check)
		{
			return imagem;
		}	
		return null;
	}

	public boolean delete(long id) throws ClassNotFoundException, SQLException {
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		stm.execute("DELETE FROM noticia_imagem WHERE id_imagem = '" + id + "' LIMIT 1");
		int check = stm.executeUpdate("DELETE FROM imagem WHERE id = '" + id + "' LIMIT 1");
		if(check > 0)
			return true;
		return false;
	}
	
	public List<Noticia> findAllNoticias(long id) throws SQLException,
	ClassNotFoundException {
		List<Noticia> noticias = new ArrayList<Noticia>();
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		ResultSet result;
		result = stm.executeQuery("SELECT noticia.* FROM noticia " +
				"LEFT JOIN noticia_imagem ON noticia.id = noticia_imagem.id_imagem " +
				"AND noticia_imagem.id_imagem  = '" + id + "')");
		
		while (result.next()) {
			Noticia noticia = new Noticia(result.getLong(1), result.getString(2), result.getString(3), result.getString(4), 
					result.getLong(5), result.getLong(6));;
			noticias.add(noticia);
		}		
		return noticias;
	}

	public List<Imagem> findAll() throws SQLException, ClassNotFoundException {
		List<Imagem> imagemes = new ArrayList<Imagem>();
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		ResultSet result;
		result = stm.executeQuery("SELECT * FROM imagem");
		
		while (result.next()) {
			Imagem imagem = new Imagem(result.getLong(1), result.getString(2), result.getString(3));
            imagemes.add(imagem);
        }		
		return imagemes;
	}


	public Imagem findById(long id) throws SQLException, ClassNotFoundException {
		Imagem imagem = null;
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		ResultSet result;
		result = stm.executeQuery("SELECT * FROM imagem WHERE id = '" + id + "'");
		
		while (result.next()) {
			imagem = new Imagem(result.getLong(1), result.getString(2), result.getString(3));
        }		
		return imagem;
	}
	
	/* Dada uma noticia, encontra todas suas imagens */
	public List<Imagem> findUsadas(long id) throws SQLException, ClassNotFoundException {
		List<Imagem> imagemes = new ArrayList<Imagem>();
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		ResultSet result;
		result = stm.executeQuery("SELECT * FROM imagem WHERE id  IN (SELECT id_imagem FROM noticia_imagem where id_noticia = '"+id+"') ");
		
		while (result.next()) {
			Imagem imagem = new Imagem(result.getLong(1), result.getString(2), result.getString(3));
            imagemes.add(imagem);
        }		
		return imagemes;
	}	
	
	/* Dada uma noticia, encontra todas as imagens que nao estao sendo usadas por ela */
	public List<Imagem> findNaoUsadas(long id) throws SQLException, ClassNotFoundException {
		List<Imagem> imagemes = new ArrayList<Imagem>();
		
		con = DbClass.getConnection();
		Statement stm = con.createStatement();
		
		ResultSet result;
		result = stm.executeQuery("SELECT * FROM imagem WHERE id NOT IN (SELECT id_imagem FROM noticia_imagem where id_noticia = '"+id+"') ");
		
		while (result.next()) {
			Imagem imagem = new Imagem(result.getLong(1), result.getString(2), result.getString(3));
            imagemes.add(imagem);
        }		
		return imagemes;
	}


}